package org.wzh.spring.di.demo4;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.wzh.spring.di.demo1.CompactDisc;

//@Component
public class CDPlayer2 implements MediaPlayer {
	private CompactDisc cd;

	@Override
	public void play() {
		cd.play();
	}

	/**
	 * @return the cd
	 */
	public CompactDisc getCd() {
		return cd;
	}

	/**
	 * 将required属性设置为false时,Spring会尝试执行自动创配,但是如果没有匹配的bean的话,Spring
	 * 将会让这个bean处于未装配的状态.
	 * 把required属性设置为false时,你需要谨慎对待.如果在你的代码中没有进行null检查的话,这个处于未装配
	 * 状态的属性可能会出现NullPointerException.
	 * 
	 * 如果有多个bean都能满足依赖关系的话,Spring将会抛出一个异常,表明没有明确指定要选择哪个bean进行自动装配.
	 * 
	 * @Autowored 是Spring的特定注解,如果不愿意在代码中到处使用Spring的特定注解来完成自动装配任务的话,
	 * 那么你可以考虑将其替换为@Inject.
	 * @Inject 注解来源于Java依赖注入规范,该规范同时还为我们定义了@Named注解.
	 * 在自动装配中,Spring同时支持@Inject和@Autowired.尽管@Inject和@Autowired之间有着一些细微的差别,
	 * 但是在大多数场景下,他们都是可以相互替换的.
	 * @param cd the cd to set
	 */
	@Autowired(required=false)
	public void setCd(CompactDisc cd) {
		this.cd = cd;
	}

	
}
